package com.cleaningcloud.cld.mapper;

import java.util.List;
import com.cleaningcloud.cld.domain.CldMaterialAllocate;
import com.cleaningcloud.cld.domain.CldMaterialAllocateDetails;
import com.cleaningcloud.cld.domain.dto.CldMaterialAllocateDto;
import com.cleaningcloud.cld.domain.vo.CldMaterialAllocateVo;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;

/**
 * 物资调拨Mapper接口
 * 
 * @author cleaningcloud
 * @date 2024-10-28
 */
public interface CldMaterialAllocateMapper 
{
    /**
     * 查询物资调拨
     * 
     * @param materialAllocateId 物资调拨主键
     * @return 物资调拨
     */
    CldMaterialAllocateVo selectCldMaterialAllocateByMaterialAllocateId(Long materialAllocateId);

    /**
     * 查询物资调拨列表
     * 
     * @param cldMaterialAllocate 物资调拨
     * @return 物资调拨集合
     */
    List<CldMaterialAllocateVo> selectCldMaterialAllocateList(CldMaterialAllocate cldMaterialAllocate);

    /**
     * 查询领用记录列表
     *
     * @param cldMaterialAllocate 物资调拨
     * @return 物资调拨集合
     */
    List<CldMaterialAllocateVo> selectCldUseList(CldMaterialAllocateDto cldMaterialAllocate);

    /**
     * 新增物资调拨
     * 
     * @param cldMaterialAllocate 物资调拨
     * @return 结果
     */
    int insertCldMaterialAllocate(CldMaterialAllocate cldMaterialAllocate);

    /**
     * 修改物资调拨
     * 
     * @param cldMaterialAllocate 物资调拨
     * @return 结果
     */
    int updateCldMaterialAllocate(CldMaterialAllocate cldMaterialAllocate);

    /**
     * 删除物资调拨
     * 
     * @param materialAllocateId 物资调拨主键
     * @return 结果
     */
    int deleteCldMaterialAllocateByMaterialAllocateId(Long materialAllocateId);

    /**
     * 批量删除物资调拨
     * 
     * @param materialAllocateIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteCldMaterialAllocateByMaterialAllocateIds(Long[] materialAllocateIds);

    /**
     * 根据物资调拨id批量删除明细
     * @param wareAllocateId
     */
    @Delete("delete from cld_material_allocate_details where materialware_allocate_id = #{wareAllocateId}")
    void deleteWareAllocateDetailsByWareAllocateId(@Param("wareAllocateId") Long wareAllocateId);

    /**
     * 批量新增物资调拨明细
     * @param list
     */
    void batchInsertWareAllocateDetails(@Param("list") List<CldMaterialAllocateDetails> list);
}
